package daily;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author MtRider
 * @version 1.0
 * @description 两个数组的交集 II
 * <p>
 * 输入：nums1 = [1,2,2,1], nums2 = [2,2]
 * 输出：[2,2]
 * @GiteeAndGithub MtRider
 * @date 2022/4/22 21:03
 */
public class demo06 {
    public static void main(String[] args) {
        //[4,9,5]
        //[9,4,9,8,4]
        int [] num1={4,9,5};
        int [] num2={9,4,9,8,4};
        System.out.println(intersect(num1,num2));

    }

    public static int[] intersect(int[] nums1, int[] nums2) {
        Map<Integer, Integer> map = new HashMap<>();
        List<Integer> list = new ArrayList<>();

        //先把数组nums1的所有元素都存放到map中，其中key是数组中
        //的元素，value是这个元素出现在数组中的次数
        for (int num : nums1) {
            map.merge(num, 1, Integer::sum);
        }
        //然后再遍历nums2数组，查看map中是否包含nums2的元素，如果包含，
        //就把当前值加入到集合list中，然后再把对应的value值减1。
        for (int i : nums2) {
            for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
                if (entry.getKey() == i && entry.getValue() > 0) {
                    list.add(i);
                    map.put(entry.getKey(), entry.getValue()-1);
                }
            }
        }
        //把集合list转化为数组
        return list.stream().mapToInt(Integer::intValue).toArray();
    }
}
